package com.sino.dao.hibernate;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.sino.bean.Acl;
import com.sino.bean.Entityrolerelation;
import com.sino.bean.Role;
import com.sino.bean.TModule;
import com.sino.dao.IAclDAO;

public class AclDAO extends HibernateDaoSupport implements IAclDAO {

	public void delAcl(Acl acl) {
		this.getSession().delete(acl);
		this.getSession().flush();
	}

	public void saveAcl(Acl acl) {
		this.getHibernateTemplate().save(acl);
	}

	public void saveOrUpdateAcl(Acl acl) {
		this.getHibernateTemplate().saveOrUpdate(acl);
	}

	public void updateAcl(Acl acl) {
		this.getHibernateTemplate().update(acl);

	}

	@SuppressWarnings("unchecked")
	public List<TModule> listAllModules() {
		return (List<TModule>) this.getSession().createQuery("from TModule tm")
				.list();
	}

	@SuppressWarnings("unchecked")
	public List<TModule> listAllParentModules() {
		String hql = "from TModule tm where tm.TModule is null order by tm.orderNum";
		return (List<TModule>) this.getSession().createQuery(hql).list();
	}

	@SuppressWarnings("unchecked")
	public List<TModule> listAllChildModulesByParent(int parentId) {
		String hql = "from TModule tm where tm.TModule.id=? order by tm.orderNum";
		return (List<TModule>) this.getSession().createQuery(hql).setParameter(
				0, parentId).list();
	}

	@SuppressWarnings("unchecked")
	public List<Acl> listModuleByRole(int roleId) {
		String hql = "from Acl acl where acl.role.id=? order by acl.module.orderNum";
		return (List<Acl>) this.getSession().createQuery(hql).setParameter(0,
				roleId).list();
	}

	@SuppressWarnings("unchecked")
	public List<Acl> listRoleByModule(int moduleId) {
       String hql="from Acl acl where acl.module.id=?";
		return (List<Acl>)this.getSession().createQuery(hql).setParameter(0, moduleId).list();
	}

	public TModule fidTModuleById(int id) {
		String hql = "from TModule tm where tm.id=?";
		return (TModule) this.getSession().createQuery(hql).setParameter(0, id)
				.uniqueResult();
	}

	public Role findRoleById(int id) {
		String hql = "from Role r where r.id=?";
		return (Role) this.getSession().createQuery(hql).setParameter(0, id)
				.uniqueResult();
	}

	@SuppressWarnings("unchecked")
	public List<Entityrolerelation> listRoleByEntity(int type, int id) {
		String hql = "from Entityrolerelation err where err.type=? and err.entityId=?";
		return (List<Entityrolerelation>) this.getSession().createQuery(hql)
				.setParameter(0, type).setParameter(1, id).list();
	}
}
